home *** CD-ROM | disk | FTP | other *** search
- /*
- $AUTHOR: Fernando Nunes e Manuel Lemos (UpperDesign@zeus.ci.ua.pt)
- $VER: HorizontalAlign 1.00 (2.10.94)
- Description: ARexx macro for FinalWriter to horizontally align all
- selected graphics
- */
-
- options results
-
- GraphicTool
- SetMeasure
-
- /* obter uma lista dos objectos seleccionados */
- selecionados = 0
- FirstObject SELECTED
- do until result = 0
- selecionados = selecionados + 1
- objectid.selecionados = result
- NextObject objectid.selecionados SELECTED
- end
-
- if selecionados > 1 then
- do
-
- call addlib("rexxreqtools.library", 0, -30, 0)
-
- NL = '0a'x
-
- ALINHAR_A_ESQUERDA = 1
- ALINHAR_AO_CENTRO = 2
- ALINHAR_A_DIREITA = 3
- AJUDA = 4
- CANCELAR = 0
-
- do until alinhar ~= AJUDA
- alinhar = rtezrequest( "Horizontal alignment of graphic objects",,
- "_Left|_Center|_Right|_Help|Cancel",,
- "" )
-
- if alinhar = AJUDA then
- call rtezrequest( "Horizontal alignment of graphic objects" || NL || NL||,
- "Left - aligns the selected objects by the" || NL ||,
- "left coordinate of the leftmost object." || NL || NL,
- "Center - centers the selected objects" || NL ||,
- "in the middle of the leftmost and" || NL ||,
- "topmost objects." || NL || NL,
- "Right - aligns the selected objects by" || NL ||,
- "right coordinate of the rightmost object.",,
- "I see",,
- "Help")
- end
- if alinhar = CANCELAR then
- return
-
- /* determinar a coordenada dos objectos mais à esquerda e mais à direita */
- do objecto = 1 to selecionados
- GetObjectCoords objectid.objecto
- coords = RESULT
- PARSE VAR coords pagina esquerda cima direita baixo
- GetObjectType objectid.objecto
- tipo = result
-
- /* linhas */
- if tipo = OBJECTO_LINHA then
- do
- if esquerda > direita then
- do
- troca = esquerda
- esquerda = direita
- direita = troca
- end
- end
- else
- direita = esquerda + direita
- if objecto = 1 | esquerda < mais_a_esquerda then
- mais_a_esquerda = esquerda
- if objecto = 1 | direita > mais_a_direita then
- mais_a_direita = direita
- end
-
- if alinhar = ALINHAR_A_ESQUERDA then
- /* mover os objectos para a esquerda */
- do objecto = 1 to selecionados
- GetObjectCoords objectid.objecto
- coords = RESULT
- PARSE VAR coords pagina esquerda cima direita baixo
- GetObjectType objectid.objecto
- tipo = result
-
- /* linhas */
- if tipo = OBJECTO_LINHA then
- do
- if esquerda < baixo then
- do
- direita = mais_a_esquerda + direita - esquerda
- esquerda = mais_a_esquerda
- end
- else
- do
- esquerda = mais_a_esquerda + esquerda - direita
- direita = mais_a_esquerda
- end
- end
- else
- esquerda = mais_a_esquerda
- SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
- end
- if alinhar = ALINHAR_AO_CENTRO then
- do
- /* centrar os objectos */
- centro = ( mais_a_direita + mais_a_esquerda ) / 2
- do objecto = 1 to selecionados
- GetObjectCoords objectid.objecto
- coords = RESULT
- PARSE VAR coords pagina esquerda cima direita baixo
- GetObjectType objectid.objecto
- tipo = result
-
- /* linhas */
- if tipo = OBJECTO_LINHA then
- do
- meia_largura = ( direita - esquerda ) / 2
- direita = centro + meia_largura
- end
- else
- meia_largura = direita / 2
- esquerda = centro - meia_largura
- SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
- end
- end
- if alinhar = ALINHAR_A_DIREITA then
- /* mover os objectos para a direita */
- do objecto = 1 to selecionados
- GetObjectCoords objectid.objecto
- coords = RESULT
- PARSE VAR coords pagina esquerda cima direita baixo
- GetObjectType objectid.objecto
- tipo = result
-
- /* linhas */
- if tipo = OBJECTO_LINHA then
- do
- if esquerda < direita then
- do
- esquerda = mais_a_direita - direita + esquerda
- direita = mais_a_direita
- end
- else
- do
- direita = mais_a_direita - esquerda + direita
- esquerda = mais_a_direita
- end
- end
- else
- esquerda = mais_a_direita - direita
- SetObjectCoords objectid.objecto pagina esquerda cima direita baixo
- end
-
- /* voltar a selecionar todos os objectos selecionados antes */
- do objecto = 1 to selecionados
- SelectObject objectid.objecto MULTIPLE
- end
- redraw
- end
-